<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
    
        //1.构造函数
        function Person() { }

        //动态为 Person 构造函数的原型添加 方法
        Person.prototype.sayHi = function() {
            console.log('hi');            
        }
        Person.prototype.walk = function() {
            console.log('散步');            
        }
        
        //p1 
        var p1 = new Person();
        console.log(p1.constructor);

        p1.sayHi();
        p1.walk();

        var p2 = new Person();
        p2.sayHi();
        p2.walk() 

        //验证 p1.sayHi == p2.sayHi
        console.log(p1.sayHi == p2.sayHi);

        //验证 p1 执行的 walk 方法 与 p2执行的 walk 方法是同一个吗？
        console.log(p1.walk == p2.walk);

        //  每个实例对象（ object ）都有一个私有属性（称之为 __proto__ ）指向它的构造函数的原型对象（prototype ）。
       console.log( Person.prototype == p1.__proto__); // true
       


       /*
           特点： 构造函数的原型对象 prototype里面的属性和方法 可以直接被 构造函数实例化 的 对象实例 访问和调用
       
       
           每个实例对象（ object ）都有一个私有属性（称之为 __proto__ ）指向它的构造函数的原型对象（prototype ）。
           __proto__ 不建议在 生产环境使用， 仅仅是在开发阶段调试使用
       */        
    </script>
</body>
</html>